package top.vains.exception;

import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authz.AuthorizationException;
import org.apache.shiro.authz.UnauthorizedException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import top.vains.entity.Result;
import top.vains.util.ResultUtils;

import javax.servlet.http.HttpServletRequest;

/**
 * 全局异常处理
 *
 * @author vains
 * @version 1.0
 * @since 2020/2/18 20:04
 **/
@Slf4j
@RestControllerAdvice
public class GlobalExceptionResolver {

    /**
     * 自定义异常处理
     * @param e 异常信息
     * @return 返回 Result
     */
    @ExceptionHandler(CustomerException.class)
    public Result customerException(CustomerException e) {
        return ResultUtils.error(e.getMessage());
    }

    /**
     * Assert 工具栏判断检测 不符合条件时 抛出的异常处理
     * @param e 异常信息
     * @return 返回 Result
     */
    @ExceptionHandler(IllegalArgumentException.class)
    public Result illegalArgumentException(IllegalArgumentException e) {
        return ResultUtils.error(e.getMessage());
    }

    /**
     * 权限不足异常 目前没用
     * @param ex 异常信息
     * @return 返回 Result
     */
    @ExceptionHandler(UnauthorizedException.class)
    public Result handleShiroException(Exception ex) {
        return ResultUtils.authError("权限不足！");
    }

    /**
     * 权限不足异常 目前没用
     * @param ex 异常信息
     * @return 返回 Result
     */
    @ExceptionHandler(AuthorizationException.class)
    public Result authorizationException(Exception ex) {
        return ResultUtils.authError("权限认证失败！");
    }

    /**
     * 其他异常
     * @param e 异常信息
     * @return 返回 Result
     */
    @ExceptionHandler(Exception.class)
    public Result exception(Exception e, HttpServletRequest request) {
        return ResultUtils.error(e.getMessage());
    }

}
